package com.yex.service;

import com.baomidou.mybatisplus.service.IService;
import com.yex.common.utils.PageUtils;
import com.yex.entity.InvestmentOrderEntity;
import com.yex.utils.JsonResultVo;

import java.util.Map;

/**
 * 报单订单
 *
 * @author chenshun
 * @email sunlightcs@gmail.com
 * @date 2019-01-04 15:11:55
 */
public interface InvestmentOrderService extends IService<InvestmentOrderEntity> {

    PageUtils queryPage(Map<String, Object> params);
    /**
     * 报单
     * 1 查询是否报单
     * 2 查询相关 产品
     * 3 判断 余额 是否足够
     * 4 入库报单
     */
    JsonResultVo insertInvestmentOrder(String investmentId, String number, Integer userId);
    /**
     * 复投报单
     */
    JsonResultVo updateInvestmentOrder(String investmentOrderId, String number, Integer userId);
    /**
     * 赎回报单
     */
    JsonResultVo updateRedeemInvestmentOrder(String investmentOrderId,String type, Integer userId);
    /**
     * 分享分配
     * 1查询还没有分配的保单列表
     * 2 查询报单用户的推荐人
     * 3 递归 用户 的 推荐关系
     *  4 算出 等级 分配金额
     * 5 更新已经 分配 状态
     */
    Integer updateIntroInvestmentOrder();
    /**
     * 利益分配
     * 1 查询到期 报单
     * 2 算出 提现 锁仓 商城积分
     * 3 更新已经 分配 状态
     */
    Integer updateInvestmentOrder();
    /**
     * 总动态奖励
     * 1 查询到期产品
     * 2 查询 所有用户
     * 3 递归 用户 的 推荐关系
     * 4 算出 直推奖 和伞下奖 总和
     *  5取最小值 为 （烧伤机制）总的动态奖
     *  6 更新已经 总动态奖 状态
     */
    Integer updateInvestment();
    /**
     * 管理者奖励
     * 1 查询已分配动态奖产品
     * 2 查询管理者用户
     * 3 递归 用户 的 推荐关系
     * 4 算出管理者奖
     * 4 更新已经 管理者奖 状态
     */
    Integer updateLeaderInvestment();

    InvestmentOrderEntity selectInvestmentOrderByInvestmentAndUser(Integer investmentId,Integer userId);
    /**
     * 自动复投报单
     * 1 查询到期 超过二十小时 没有复投的报单
     * 2 重新给 到期报单 创建新报单
     * 3 更新已经 自动复投报单 状态
     */
    Integer updateAutoInvestment();

    JsonResultVo selectInvestmentOrderByUserId(Integer userId);

    JsonResultVo selectUserInvestmentOrder(Integer userId);


}

